

// 工具类实现：
//     1.获取系统时间
//     2.获取文件大小
//     3.创建目录
//     4.获取文件所在目录
    
#ifndef M_UTIL_H__
#define M_UTIL_H__

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <ctime>
#include <cassert>
#include <sys/stat.h>
#include <string.h>

namespace tclog{
    namespace util{
        class Date{
            public:
                static size_t now(){ return (size_t)time(nullptr);}
        };

        class File{
            public:

            static bool exist(const std::string &name){
                if (name.empty()) return false;
                struct stat st;

                int result=stat(name.c_str(),&st);
                if (result == 0) {
                    return true;  // 文件存在
                } else if (errno == ENOENT) {
                    return false; // 文件不存在
                } else {
                // 其他错误（权限不足等）
                std::cerr << "检查文件存在时出错: " << strerror(errno) << std::endl;
                return false;
                }
            }

            static std::string path(const std::string &name){
                if(name.empty()) return ".";
                size_t pos=name.find_last_of("/\\");
                if(pos==std::string::npos) return ".";
                return name.substr(0,pos+1);
            }

            static void create_directory(const std::string &path){
                if(path.empty()) return;
                if(exist(path)) return;

                size_t pos,idx=0;
                while(idx<path.size()){
                    pos=path.find_first_of("/\\",idx);
                    if(pos==std::string::npos){
                        mkdir(path.c_str(),0755);
                        return;
                    }
                    if(pos==idx){
                        idx=pos+1;
                        continue;
                    }
                    std::string subdir=path.substr(0,pos);
                    if(subdir=="."||subdir==".."){
                        idx=pos+1;
                        continue;
                    }
                    if(exist(subdir)){
                        idx=pos+1;
                        continue;
                    }
                    mkdir(subdir.c_str(),0755);
                    idx=pos+1;
                }
            }
        };
    }
}


#endif